Исходный текст
Option Explicit
Call TestAttributeDef()
'==============================================================================
' Тест методов и свойств объектов TDMSAttributeDef и TDMSAttributeDefs:
' создать новый тип атрибута, новый объект с атрибутом этого типа и
' попытаться удалить созданный тип атрибута из системы.
'Выполнять скрипт может только пользователь с правами системного администратора.
'==============================================================================
Sub TestAttributeDef()
Dim AttrDef, obj, ObjDef
'Создать тип объекта для тестирования (или использовать существующий)
If Not ThisApplication.ObjectDefs.Has("OBJ_TEST") Then
Set ObjDef = ThisApplication.ObjectDefs.Create
ObjDef.SysName = "OBJ_TEST"
Else: Set ObjDef = ThisApplication.ObjectDefs("OBJ_TEST")
End If
'Создать новый тип атрибута, дать ему описание и присвоить целочисленный тип данных
Set AttrDef = ObjDef.AttributeDefs.Create
AttrDef.Description = "Attribute for testing"
AttrDef.Type = tdmInteger
'Присвоить значение по умолчанию (можно, поскольку тип атрибута создан в коллекции типа
'объекта: это значит, что для всех новых объектов "OBJ_TEST" значение атрибута
'AttrDef будет равно 10).
AttrDef.Value = 10
'Новый тип атрибута немедленно добавляется в коллекцию приложения (глобальную),
'хотя создан в локальной коллекции типа объекта
MsgBox "Тип атрибута """ & AttrDef.Description & _
""" существует в коллекции ThisApplication.AttributeDefs: " & Chr(13) & _
ThisApplication.AttributeDefs.Has(AttrDef) 'Методу Has можно передать
'свойство типа атрибута (SysName, Description etc)
'Создать объект типа "OBJ_TEST" и присвоить другое значение нашему атрибуту
Set obj = ThisApplication.ObjectDefs("OBJ_TEST").CreateObject
obj.Attributes(AttrDef.SysName).Value = 12345
'Теперь удалить тип атрибута из коллекции типа объекта: это возможно, и никак не отразится
'на уже созданном объекте - только для новых: на них наш атрибут уже не появится.
obj.ObjectDef.AttributeDefs.Remove AttrDef
MsgBox "Значение атрибута на объекте: " & obj.Attributes(AttrDef.SysName).Value
'А такой вызов приведет к удалению типа атрибута из системы. Правда, в данном случае ничего
'не получится, поскольку есть пользовательский объект с атрибутом типа AttrDef.
'obj.ObjectDef.AttributeDefs(AttrDef).Erase
'Удалить созданный нами объект. Если этого не сделать, то тип атрибута
'нельзя будет удалить из системы: связи объекта продолжают храниться в базе
obj.Erase
'Теперь можно удалить тип атрибута из системы.
ThisApplication.AttributeDefs.Remove(AttrDef)
'То же самое можно было сделать другим способом:
' ThisApplication.AttributeDefs(AttrDef).Erase
MsgBox "Тип атрибута """ & AttrDef.Description & _
""" существует в коллекции ThisApplication.AttributeDefs: " & Chr(13) & _
ThisApplication.AttributeDefs.Has(AttrDef)
End Sub
'==============================================================================